home *** CD-ROM | disk | FTP | other *** search
/ Oh!X 2000 Spring / Oh!X 2000 Spring Special CD-ROM (Japan) (Part 2).7z / Oh!X 2000 Spring Special CD-ROM (Japan) (Part 2).bin / DXF / include / dmusicf.h < prev    next >
C/C++ Source or Header  |  1999-04-23  |  36KB  |  1,179 lines

  1. /************************************************************************
  2. *                                                                       *
  3. *   dmusicf.h -- This module defines the DirectMusic file formats       *
  4. *                                                                       *
  5. *   Copyright (c) 1998, Microsoft Corp. All rights reserved.            *
  6. *                                                                       *
  7. ************************************************************************/
  8.  
  9. #ifndef _DMUSICF_
  10. #define _DMUSICF_
  11.  
  12. #include <windows.h>
  13.  
  14. #define COM_NO_WINDOWS_H
  15. #include <objbase.h>
  16.  
  17. #include <mmsystem.h>
  18.  
  19. #include <pshpack8.h>
  20.  
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24.  
  25. interface IDirectMusicCollection;
  26. #ifndef __cplusplus 
  27. typedef interface IDirectMusicCollection IDirectMusicCollection;
  28. #endif
  29.  
  30. /* Common chunks */
  31.  
  32. #define DMUS_FOURCC_GUID_CHUNK        mmioFOURCC('g','u','i','d')
  33. #define DMUS_FOURCC_INFO_LIST         mmioFOURCC('I','N','F','O')
  34. #define DMUS_FOURCC_UNFO_LIST         mmioFOURCC('U','N','F','O')
  35. #define DMUS_FOURCC_UNAM_CHUNK         mmioFOURCC('U','N','A','M')
  36. #define DMUS_FOURCC_UART_CHUNK         mmioFOURCC('U','A','R','T')
  37. #define DMUS_FOURCC_UCOP_CHUNK         mmioFOURCC('U','C','O','P')
  38. #define DMUS_FOURCC_USBJ_CHUNK         mmioFOURCC('U','S','B','J')
  39. #define DMUS_FOURCC_UCMT_CHUNK         mmioFOURCC('U','C','M','T')
  40. #define DMUS_FOURCC_CATEGORY_CHUNK    mmioFOURCC('c','a','t','g')
  41. #define DMUS_FOURCC_VERSION_CHUNK     mmioFOURCC('v','e','r','s')
  42.  
  43. /* The following structures are used by the Tracks, and are the packed structures */
  44. /* that are passed to the Tracks inside the IStream. */
  45.  
  46.  
  47. typedef struct _DMUS_IO_SEQ_ITEM
  48. {
  49.     MUSIC_TIME    mtTime;
  50.     MUSIC_TIME    mtDuration;
  51.     DWORD         dwPChannel;
  52.     short         nOffset; 
  53.     BYTE          bStatus;
  54.     BYTE          bByte1;
  55.     BYTE          bByte2;
  56. } DMUS_IO_SEQ_ITEM;
  57.  
  58.  
  59. typedef struct _DMUS_IO_CURVE_ITEM
  60. {
  61.     MUSIC_TIME  mtStart;
  62.     MUSIC_TIME  mtDuration;
  63.     MUSIC_TIME  mtResetDuration;
  64.     DWORD       dwPChannel;
  65.     short       nOffset;
  66.     short       nStartValue;
  67.     short       nEndValue;
  68.     short       nResetValue;
  69.     BYTE        bType;
  70.     BYTE        bCurveShape;
  71.     BYTE        bCCData;
  72.     BYTE        bFlags;
  73. } DMUS_IO_CURVE_ITEM;
  74.  
  75.  
  76. typedef struct _DMUS_IO_TEMPO_ITEM
  77. {
  78.     MUSIC_TIME    lTime;
  79.     double        dblTempo;
  80. } DMUS_IO_TEMPO_ITEM;
  81.  
  82.  
  83. typedef struct _DMUS_IO_SYSEX_ITEM
  84. {
  85.     MUSIC_TIME    mtTime;
  86.     DWORD         dwPChannel;
  87.     DWORD         dwSysExLength;
  88. } DMUS_IO_SYSEX_ITEM;
  89.  
  90.  
  91. typedef struct _DMUS_IO_TIMESIGNATURE_ITEM
  92. {
  93.     MUSIC_TIME    lTime;
  94.     BYTE          bBeatsPerMeasure;   /* beats per measure (top of time sig) */
  95.     BYTE          bBeat;              /* what note receives the beat (bottom of time sig.) */
  96.                                       /* we can assume that 0 means 256th note */
  97.     WORD          wGridsPerBeat;      /* grids per beat */
  98. } DMUS_IO_TIMESIGNATURE_ITEM;
  99.  
  100. /* PARAM structures, used by GetParam() and SetParam() */
  101. typedef struct _DMUS_COMMAND_PARAM
  102. {
  103.     BYTE bCommand;
  104.     BYTE bGrooveLevel;
  105.     BYTE bGrooveRange;
  106. } DMUS_COMMAND_PARAM;
  107.  
  108. typedef struct _DMUS_COMMAND_PARAM_2
  109. {
  110.     MUSIC_TIME mtTime;
  111.     BYTE bCommand;
  112.     BYTE bGrooveLevel;
  113.     BYTE bGrooveRange;
  114. } DMUS_COMMAND_PARAM_2;
  115.  
  116. typedef DMUS_CHORD_KEY DMUS_CHORD_PARAM; /* DMUS_CHORD_KEY defined in dmusici.h */
  117.  
  118. typedef struct _DMUS_RHYTHM_PARAM
  119. {
  120.     DMUS_TIMESIGNATURE  TimeSig;
  121.     DWORD               dwRhythmPattern;
  122. } DMUS_RHYTHM_PARAM;
  123.  
  124. typedef struct _DMUS_TEMPO_PARAM
  125. {
  126.     MUSIC_TIME  mtTime;
  127.     double      dblTempo;
  128. } DMUS_TEMPO_PARAM;
  129.  
  130.  
  131. typedef struct _DMUS_MUTE_PARAM
  132. {
  133.     DWORD   dwPChannel;
  134.     DWORD   dwPChannelMap;
  135.     BOOL    fMute;
  136. } DMUS_MUTE_PARAM;
  137.  
  138. /* Style chunks */
  139.  
  140. #define DMUS_FOURCC_STYLE_FORM        mmioFOURCC('D','M','S','T')
  141. #define DMUS_FOURCC_STYLE_CHUNK       mmioFOURCC('s','t','y','h')
  142. #define DMUS_FOURCC_PART_LIST         mmioFOURCC('p','a','r','t')
  143. #define DMUS_FOURCC_PART_CHUNK        mmioFOURCC('p','r','t','h')
  144. #define DMUS_FOURCC_NOTE_CHUNK        mmioFOURCC('n','o','t','e')
  145. #define DMUS_FOURCC_CURVE_CHUNK       mmioFOURCC('c','r','v','e')
  146. #define DMUS_FOURCC_PATTERN_LIST      mmioFOURCC('p','t','t','n')
  147. #define DMUS_FOURCC_PATTERN_CHUNK     mmioFOURCC('p','t','n','h')
  148. #define DMUS_FOURCC_RHYTHM_CHUNK      mmioFOURCC('r','h','t','m')
  149. #define DMUS_FOURCC_PARTREF_LIST      mmioFOURCC('p','r','e','f')
  150. #define DMUS_FOURCC_PARTREF_CHUNK     mmioFOURCC('p','r','f','c')
  151. #define DMUS_FOURCC_STYLE_PERS_REF_LIST   mmioFOURCC('p', 'r', 'r', 'f')
  152. #define DMUS_FOURCC_MOTIFSETTINGS_CHUNK   mmioFOURCC('m', 't', 'f', 's')
  153.  
  154. /* Flags used by variations: these make up the DWORDs in dwVariationChoices.               */
  155.  
  156. /* These flags determine the types of chords supported by a given variation in DirectMusic */
  157. /* mode.  The first seven flags (bits 1-7) are set if the variation supports major chords  */
  158. /* rooted in scale positions, so, e.g., if bits 1, 2, and 4 are set, the variation         */
  159. /* supports major chords rooted in the tonic, second, and fourth scale positions.  The     */
  160. /* next seven flags serve the same purpose, but for minor chords, and the following seven  */
  161. /* flags serve the same purpose for chords that are not major or minor (e.g., SUS 4        */
  162. /* chords).  Bits 22, 23, and 24 are set if the variation supports chords rooted in the    */
  163. /* scale, chords rooted sharp of scale tones, and chords rooted flat of scale tones,       */
  164. /* respectively.  For example, to support a C# minor chord in the scale of C Major,        */
  165. /* bits 8 (for tonic minor) and 24 (for sharp) need to be set.  Bits 25, 26, an 27 handle  */
  166. /* chords that are triads, 6th or 7th chords, and chords with extensions, respectively.    */
  167. /* bits 28 and 29 handle chords that are followed by tonic and dominant chords,            */
  168. /* respectively.                                                                           */
  169. #define DMUS_VARIATIONF_MAJOR        0x0000007F /* Seven positions in the scale - major chords. */    
  170. #define DMUS_VARIATIONF_MINOR        0x00003F80 /* Seven positions in the scale - minor chords. */    
  171. #define DMUS_VARIATIONF_OTHER        0x001FC000 /* Seven positions in the scale - other chords. */    
  172. #define DMUS_VARIATIONF_ROOT_SCALE   0x00200000 /* Handles chord roots in the scale. */         
  173. #define DMUS_VARIATIONF_ROOT_FLAT    0x00400000 /* Handles flat chord roots (based on scale notes). */         
  174. #define DMUS_VARIATIONF_ROOT_SHARP   0x00800000 /* Handles sharp chord roots (based on scale notes). */         
  175. #define DMUS_VARIATIONF_TYPE_TRIAD   0x01000000 /* Handles simple chords - triads. */  
  176. #define DMUS_VARIATIONF_TYPE_6AND7   0x02000000 /* Handles simple chords - 6 and 7. */  
  177. #define DMUS_VARIATIONF_TYPE_COMPLEX 0x04000000 /* Handles complex chords. */  
  178. #define DMUS_VARIATIONF_DEST_TO1     0x08000000 /* Handles transitions to 1 chord. */  
  179. #define DMUS_VARIATIONF_DEST_TO5     0x10000000 /* Handles transitions to 5 chord. */  
  180.  
  181. /* The top three bits of the variation flags are the Mode bits.  If all are 0, it's IMA. */  
  182. /* If the smallest is 1, it's Direct Music. */
  183. #define DMUS_VARIATIONF_MODES        0xE0000000
  184. #define DMUS_VARIATIONF_IMA25_MODE   0x00000000
  185. #define DMUS_VARIATIONF_DMUS_MODE    0x20000000
  186.  
  187. #pragma pack(2)
  188.  
  189. typedef struct _DMUS_IO_TIMESIG
  190. {
  191.     /* Time signatures define how many beats per measure, which note receives */
  192.     /* the beat, and the grid resolution. */
  193.     BYTE    bBeatsPerMeasure;   /* beats per measure (top of time sig) */
  194.     BYTE    bBeat;              /* what note receives the beat (bottom of time sig.) */
  195.                                 /* we can assume that 0 means 256th note */
  196.     WORD    wGridsPerBeat;      /* grids per beat */
  197. } DMUS_IO_TIMESIG;
  198.  
  199. typedef struct _DMUS_IO_STYLE
  200. {
  201.     DMUS_IO_TIMESIG     timeSig;        /* Styles have a default Time Signature */
  202.     double              dblTempo;   
  203. } DMUS_IO_STYLE;
  204.  
  205. typedef struct _DMUS_IO_VERSION
  206. {
  207.     DWORD               dwVersionMS;        /* Version # high-order 32 bits */
  208.     DWORD               dwVersionLS;        /* Version # low-order 32 bits  */
  209. } DMUS_IO_VERSION;
  210.  
  211. typedef struct _DMUS_IO_PATTERN
  212. {
  213.     DMUS_IO_TIMESIG     timeSig;        /* Patterns can override the Style's Time sig. */
  214.     BYTE                bGrooveBottom;  /* bottom of groove range */
  215.     BYTE                bGrooveTop;     /* top of groove range */
  216.     WORD                wEmbellishment; /* Fill, Break, Intro, End, Normal, Motif */
  217.     WORD                wNbrMeasures;   /* length in measures */
  218. } DMUS_IO_PATTERN;
  219.  
  220. typedef struct _DMUS_IO_STYLEPART
  221. {
  222.     DMUS_IO_TIMESIG     timeSig;        /* can override pattern's */
  223.     DWORD               dwVariationChoices[32]; /* MOAW choice bitfield */
  224.     GUID                guidPartID;     /* identifies the part */
  225.     WORD                wNbrMeasures;   /* length of the Part */
  226.     BYTE                bPlayModeFlags; /* see PLAYMODE flags */
  227.     BYTE                bInvertUpper;   /* inversion upper limit */
  228.     BYTE                bInvertLower;   /* inversion lower limit */
  229. } DMUS_IO_STYLEPART;
  230.  
  231. typedef struct _DMUS_IO_PARTREF
  232. {
  233.     GUID    guidPartID;         /* unique ID for matching up with parts */
  234.     WORD    wLogicalPartID;     /* corresponds to port/device/midi channel */
  235.     BYTE    bVariationLockID;   /* parts with the same ID lock variations. */
  236.                                 /* high bit is used to identify master Part */
  237.     BYTE    bSubChordLevel;     /* tells which sub chord level this part wants */
  238.     BYTE    bPriority;          /* 256 priority levels. Parts with lower priority */
  239.                                 /* aren't played first when a device runs out of */
  240.                                 /* notes */
  241.     BYTE    bRandomVariation;   /* when set, matching variations play in random order */
  242.                                 /* when clear, matching variations play sequentially */
  243. } DMUS_IO_PARTREF;
  244.  
  245. typedef struct _DMUS_IO_STYLENOTE
  246. {
  247.     MUSIC_TIME  mtGridStart;    /* when this note occurs */
  248.     DWORD       dwVariation;    /* variation bits */
  249.     MUSIC_TIME  mtDuration;     /* how long this note lasts */
  250.     short       nTimeOffset;    /* offset from mtGridStart */
  251.     WORD        wMusicValue;    /* Position in scale. */
  252.     BYTE        bVelocity;      /* Note velocity. */
  253.     BYTE        bTimeRange;     /* Range to randomize start time. */
  254.     BYTE        bDurRange;      /* Range to randomize duration. */
  255.     BYTE        bVelRange;      /* Range to randomize velocity. */
  256.     BYTE        bInversionID;   /* Identifies inversion group to which this note belongs */
  257.     BYTE        bPlayModeFlags; /* Can override part */
  258. } DMUS_IO_STYLENOTE;
  259.  
  260. typedef struct _DMUS_IO_STYLECURVE
  261. {
  262.     MUSIC_TIME  mtGridStart;    /* when this curve occurs */
  263.     DWORD       dwVariation;    /* variation bits */
  264.     MUSIC_TIME  mtDuration;     /* how long this curve lasts */
  265.     MUSIC_TIME  mtResetDuration;/* how long after the end of the curve to reset the curve */
  266.     short       nTimeOffset;    /* offset from mtGridStart */
  267.     short       nStartValue;    /* curve's start value */
  268.     short       nEndValue;      /* curve's end value */
  269.     short       nResetValue;    /* the value to which to reset the curve */
  270.     BYTE        bEventType;     /* type of curve */
  271.     BYTE        bCurveShape;    /* shape of curve */
  272.     BYTE        bCCData;        /* CC# */
  273.     BYTE        bFlags;         /* Bit 1=TRUE means to send nResetValue. Otherwise, don't.
  274.                                    Other bits are reserved. */
  275. } DMUS_IO_STYLECURVE;
  276.  
  277. typedef struct _DMUS_IO_MOTIFSETTINGS
  278. {
  279.     DWORD       dwRepeats;      /* Number of repeats. By default, 0. */
  280.     MUSIC_TIME  mtPlayStart;    /* Start of playback. By default, 0. */
  281.     MUSIC_TIME  mtLoopStart;    /* Start of looping portion. By default, 0. */
  282.     MUSIC_TIME  mtLoopEnd;      /* End of loop. Must be greater than mtLoopStart. By default equal to length of motif. */
  283.     DWORD       dwResolution;   /* Default resolution. */
  284. } DMUS_IO_MOTIFSETTINGS;
  285.  
  286. #pragma pack()
  287.  
  288.  
  289. /*
  290. RIFF
  291. (
  292.     'DMST'          // Style
  293.     <styh-ck>       // Style header chunk
  294.     <guid-ck>       // Every Style has a GUID
  295.     [<UNFO-list>]   // Name, author, copyright info., comments
  296.     [<vers-ck>]     // version chunk
  297.     <part-list>...  // List of parts in the Style, used by patterns
  298.     <pttn-list>...  // List of patterns in the Style
  299.     <DMBD-form>...  // List of bands in the Style
  300.     [<motf-list>]   // List of motifs in the Style
  301.     [<prrf-list>]   // List of chord map references in the Style
  302. )
  303.  
  304.     // <styh-ck>
  305.     styh
  306.     (
  307.         <DMUS_IO_STYLE>
  308.     )
  309.  
  310.     // <guid-ck>
  311.     guid
  312.     (
  313.         <GUID>
  314.     )
  315.  
  316.     // <vers-ck>
  317.     vers
  318.     (
  319.         <DMUS_IO_VERSION>
  320.     )
  321.  
  322.     // <part-list>
  323.     LIST
  324.     (
  325.         'part'
  326.         <prth-ck>       // Part header chunk
  327.         [<UNFO-list>]
  328.         [<note-ck>]     // List of notes in Part
  329.         [<crve-ck>]     // List of curves in Part
  330.     )
  331.  
  332.         // <orth-ck>
  333.         prth
  334.         (
  335.             <DMUS_IO_STYLEPART>
  336.         )
  337.  
  338.         // <note-ck>
  339.         'note'
  340.         (
  341.             // sizeof DMUS_IO_STYLENOTE:DWORD
  342.             <DMUS_IO_STYLENOTE>...
  343.         )
  344.  
  345.         // <crve-ck>
  346.         'crve'
  347.         (
  348.             // sizeof DMUS_IO_STYLECURVE:DWORD
  349.             <DMUS_IO_STYLECURVE>...
  350.         )
  351.  
  352.     // <pttn-list>
  353.     LIST
  354.     (
  355.         'pttn'
  356.         <ptnh-ck>       // Pattern header chunk
  357.         <rhtm-ck>       // List of rhythms for chord matching
  358.         [<UNFO-list>]
  359.         [<mtfs-ck>]     // Motif settings chunk
  360.         <pref-list>...  // List of part reference id's
  361.     )
  362.  
  363.         // <ptnh-ck>
  364.         ptnh
  365.         (
  366.             <DMUS_IO_PATTERN>
  367.         )
  368.  
  369.         // <rhtm-ck>
  370.         'rhtm'
  371.         (
  372.             // DWORD's representing rhythms for chord matching based on number
  373.             // of measures in the pattern
  374.         )
  375.  
  376.         // pref-list
  377.         LIST
  378.         (
  379.             'pref'
  380.             <prfc-ck>   // part ref chunk
  381.         )
  382.  
  383.         // <prfc-ck>
  384.         prfc
  385.         (
  386.             <DMUS_IO_PARTREF>
  387.         )
  388.  
  389.         // <mtfs-ck>
  390.         mtfs
  391.         (
  392.             <DMUS_IO_MOTIFSETTINGS>
  393.         )
  394.  
  395.     // <prrf-list>
  396.     LIST
  397.     (
  398.         'prrf'
  399.         // some number of <DMRF>
  400.     )
  401. */
  402.  
  403. /* Chord and command file formats */
  404.  
  405. #define DMUS_FOURCC_CHORDTRACK_LIST         mmioFOURCC('c','o','r','d')
  406. #define DMUS_FOURCC_CHORDTRACKHEADER_CHUNK  mmioFOURCC('c','r','d','h')
  407. #define DMUS_FOURCC_CHORDTRACKBODY_CHUNK    mmioFOURCC('c','r','d','b')
  408.  
  409. #define DMUS_FOURCC_COMMANDTRACK_CHUNK      mmioFOURCC('c','m','n','d')
  410.  
  411. typedef struct _DMUS_IO_CHORD
  412. {
  413.     WCHAR       wszName[16];    /* Name of the chord */
  414.     MUSIC_TIME  mtTime;         /* Time of this chord */
  415.     WORD        wMeasure;       /* Measure this falls on */
  416.     BYTE        bBeat;          /* Beat this falls on */
  417. } DMUS_IO_CHORD;
  418.  
  419. typedef struct _DMUS_IO_SUBCHORD
  420. {
  421.     DWORD   dwChordPattern;     /* Notes in the subchord */
  422.     DWORD   dwScalePattern;     /* Notes in the scale */
  423.     DWORD   dwInversionPoints;  /* Where inversions can occur */
  424.     DWORD   dwLevels;           /* Which levels are supported by this subchord */
  425.     BYTE    bChordRoot;         /* Root of the subchord */
  426.     BYTE    bScaleRoot;         /* Root of the scale */
  427. } DMUS_IO_SUBCHORD;
  428.  
  429. typedef struct _DMUS_IO_COMMAND
  430. {
  431.     MUSIC_TIME  mtTime;         /* Time of this command */
  432.     WORD        wMeasure;       /* Measure this falls on */
  433.     BYTE        bBeat;          /* Beat this falls on */
  434.     BYTE        bCommand;       /* Command type (see #defines below) */
  435.     BYTE        bGrooveLevel;   /* Groove level (0 if command is not a groove) */
  436.     BYTE        bGrooveRange;   /* Groove range  */
  437. } DMUS_IO_COMMAND;
  438.  
  439.  
  440. /*
  441.  
  442.     // <cord-list>
  443.     LIST
  444.     (
  445.         'cord'
  446.         <crdh-ck>
  447.         <crdb-ck>       // Chord body chunk
  448.     )
  449.  
  450.         // <crdh-ck>
  451.         crdh
  452.         (
  453.             // Scale: dword (upper 8 bits for root, lower 24 for scale)
  454.         )
  455.  
  456.         // <crdb-ck>
  457.         crdb
  458.         (
  459.             // sizeof DMUS_IO_CHORD:dword
  460.             <DMUS_IO_CHORD>
  461.             // # of DMUS_IO_SUBCHORDS:dword
  462.             // sizeof DMUS_IO_SUBCHORDS:dword
  463.             // a number of <DMUS_IO_SUBCHORD>
  464.         )
  465.  
  466.  
  467.     // <cmnd-list>
  468.     'cmnd'
  469.     (
  470.         //sizeof DMUS_IO_COMMAND: DWORD
  471.         <DMUS_IO_COMMAND>...
  472.     )
  473.  
  474. */
  475.  
  476. /*  File io for DirectMusic Tool and ToolGraph objects
  477. */
  478.  
  479. /* RIFF ids: */
  480.  
  481. #define DMUS_FOURCC_TOOLGRAPH_FORM  mmioFOURCC('D','M','T','G')
  482. #define DMUS_FOURCC_TOOL_LIST       mmioFOURCC('t','o','l','l')
  483. #define DMUS_FOURCC_TOOL_FORM       mmioFOURCC('D','M','T','L')
  484. #define DMUS_FOURCC_TOOL_CHUNK      mmioFOURCC('t','o','l','h')
  485.  
  486. /* io structures: */
  487.  
  488. typedef struct _DMUS_IO_TOOL_HEADER
  489. {
  490.     GUID        guidClassID;    /* Class id of tool. */
  491.     long        lIndex;         /* Position in graph. */
  492.     DWORD       cPChannels;     /* Number of items in channels array. */
  493.     FOURCC      ckid;           /* chunk ID of tool's data chunk if 0 fccType valid. */
  494.     FOURCC      fccType;        /* list type if NULL ckid valid. */
  495.     DWORD       dwPChannels[1]; /* Array of PChannels, size determined by cPChannels. */
  496. } DMUS_IO_TOOL_HEADER;
  497.  
  498. /*
  499. RIFF
  500. (
  501.     'DMTG'          // DirectMusic ToolGraph chunk
  502.     [<guid-ck>]     // GUID for ToolGraph
  503.     [<vers-ck>]     // Optional version info
  504.     [<UNFO-list>]   // Name, author, copyright info., comments
  505.     <toll-list>     // List of Tools
  506. )
  507.  
  508.     // <guid-ck>
  509.     'guid'
  510.     (
  511.         <GUID>
  512.     )
  513.  
  514.     // <vers-ck>
  515.     vers
  516.     (
  517.         <DMUS_IO_VERSION>
  518.     )
  519.  
  520.     // <toll-list>
  521.     LIST
  522.     (
  523.         'toll'          // List of tools
  524.         <DMTL-form>...  // Each tool is encapsulated in a RIFF chunk
  525.     )
  526.  
  527. // <DMTL-form>      // Tools can be embedded in a graph or stored as separate files.
  528. RIFF
  529. (
  530.     'DMTL'
  531.     <tolh-ck>
  532.     [<guid-ck>]     // Optional GUID for tool object instance (not to be confused with Class id in track header)
  533.     [<vers-ck>]     // Optional version info
  534.     [<UNFO-list>]   // Optional name, author, copyright info., comments
  535.     [<data>]        // Tool data. Must be a RIFF readable chunk.
  536. )
  537.  
  538.     // <tolh-ck>            // Tool header chunk
  539.     (
  540.         'tolh'
  541.         <DMUS_IO_TOOL_HEADER>   // Tool header
  542.     )
  543. */
  544.  
  545. /*  File io for DirectMusic Band Track object */
  546.  
  547.  
  548. /* RIFF ids: */
  549. #define DMUS_FOURCC_BANDTRACK_FORM  mmioFOURCC('D','M','B','T')
  550. #define DMUS_FOURCC_BANDTRACK_CHUNK mmioFOURCC('b','d','t','h')
  551. #define DMUS_FOURCC_BANDS_LIST      mmioFOURCC('l','b','d','l')
  552. #define DMUS_FOURCC_BAND_LIST       mmioFOURCC('l','b','n','d')
  553. #define DMUS_FOURCC_BANDITEM_CHUNK  mmioFOURCC('b','d','i','h')
  554.  
  555. /*  io structures */
  556. typedef struct _DMUS_IO_BAND_TRACK_HEADER
  557. {
  558.     BOOL bAutoDownload;     /* Determines if Auto-Download is enabled. */
  559. } DMUS_IO_BAND_TRACK_HEADER;
  560.  
  561. typedef struct _DMUS_IO_BAND_ITEM_HEADER
  562. {
  563.     MUSIC_TIME lBandTime;   /* Position in track list. */
  564. } DMUS_IO_BAND_ITEM_HEADER;
  565.  
  566. /*
  567. RIFF
  568. (
  569.     'DMBT'          // DirectMusic Band Track form-type
  570.     [<bdth-ck>]     // Band track header
  571.     [<guid-ck>]     // GUID for band track
  572.     [<vers-ck>]     // Optional version info
  573.     [<UNFO-list>]   // Name, author, copyright info., comments
  574.     <lbdl-list>     // List of Band Lists
  575. )
  576.  
  577.     // <bnth-ck>
  578.     'bdth'
  579.     (
  580.         <DMUS_IO_BAND_TRACK_HEADER>
  581.     )
  582.  
  583.     // <guid-ck>
  584.     'guid'
  585.     (
  586.         <GUID>
  587.     )
  588.  
  589.     // <vers-ck>
  590.     vers
  591.     (
  592.         <DMUS_IO_VERSION>
  593.     )
  594.  
  595.     // <lbdl-list>
  596.     LIST
  597.     (
  598.         'lbdl'          // List of bands
  599.         <lbnd-list>     // Each band is encapsulated in a list
  600.     )
  601.  
  602.         // <lbnd-list>
  603.         LIST
  604.         (
  605.             'lbnd'
  606.             <bdih-ck>
  607.             <DMBD-form> // Band
  608.         )
  609.  
  610.             // <bdih-ck>            // band item header
  611.             (
  612.                 <DMUS_IO_BAND_ITEM_HEADER>  // Band item header
  613.             )
  614. */      
  615.  
  616.  
  617. /*  File io for DirectMusic Band object
  618. */
  619.  
  620. /* RIFF ids: */
  621.  
  622. #define DMUS_FOURCC_BAND_FORM           mmioFOURCC('D','M','B','D')
  623. #define DMUS_FOURCC_INSTRUMENTS_LIST    mmioFOURCC('l','b','i','l')
  624. #define DMUS_FOURCC_INSTRUMENT_LIST     mmioFOURCC('l','b','i','n')
  625. #define DMUS_FOURCC_INSTRUMENT_CHUNK    mmioFOURCC('b','i','n','s')
  626.  
  627. /* Flags for DMUS_IO_INSTRUMENT
  628.  */
  629. #define DMUS_IO_INST_PATCH          (1 << 0)        /* dwPatch is valid. */
  630. #define DMUS_IO_INST_BANKSELECT     (1 << 1)        /* dwPatch contains a valid Bank Select MSB and LSB part */
  631. #define DMUS_IO_INST_ASSIGN_PATCH   (1 << 3)        /* dwAssignPatch is valid */
  632. #define DMUS_IO_INST_NOTERANGES     (1 << 4)        /* dwNoteRanges is valid */
  633. #define DMUS_IO_INST_PAN            (1 << 5)        /* bPan is valid */
  634. #define DMUS_IO_INST_VOLUME         (1 << 6 )       /* bVolume is valid */
  635. #define DMUS_IO_INST_TRANSPOSE      (1 << 7)        /* nTranspose is valid */
  636. #define DMUS_IO_INST_GM             (1 << 8)        /* Instrument is from GM collection */
  637. #define DMUS_IO_INST_GS             (1 << 9)        /* Instrument is from GS collection */
  638. #define DMUS_IO_INST_XG             (1 << 10)       /* Instrument is from XG collection */
  639. #define DMUS_IO_INST_CHANNEL_PRIORITY (1 << 11)     /* dwChannelPriority is valid */
  640. #define DMUS_IO_INST_USE_DEFAULT_GM_SET (1 << 12)   /* Always use the default GM set for this patch,  */
  641.                                                     /* don't rely on the synth caps stating GM or GS in hardware. */
  642.  
  643. /*  io structures */
  644. typedef struct _DMUS_IO_INSTRUMENT
  645. {
  646.     DWORD   dwPatch;            /* MSB, LSB and Program change to define instrument */
  647.     DWORD   dwAssignPatch;      /* MSB, LSB and Program change to assign to instrument when downloading */
  648.     DWORD   dwNoteRanges[4];    /* 128 bits; one for each MIDI note instrument needs to able to play */
  649.     DWORD   dwPChannel;         /* PChannel instrument plays on */
  650.     DWORD   dwFlags;            /* DMUS_IO_INST_ flags */
  651.     BYTE    bPan;               /* Pan for instrument */
  652.     BYTE    bVolume;            /* Volume for instrument */
  653.     short   nTranspose;         /* Number of semitones to transpose notes */
  654.     DWORD   dwChannelPriority;  /* Channel priority */
  655. } DMUS_IO_INSTRUMENT;
  656.  
  657. /*
  658. // <DMBD-form> bands can be embedded in other forms
  659. RIFF
  660. (
  661.     'DMBD'          // DirectMusic Band chunk
  662.     [<guid-ck>]     // GUID for band
  663.     [<vers-ck>]     // Optional version info
  664.     [<UNFO-list>]   // Name, author, copyright info., comments
  665.     <lbil-list>     // List of Instruments
  666. )
  667.  
  668.     // <guid-ck>
  669.     'guid'
  670.     (
  671.         <GUID>
  672.     )
  673.  
  674.     // <vers-ck>
  675.     vers
  676.     (
  677.         <DMUS_IO_VERSION>
  678.     )
  679.  
  680.     // <lbil-list>
  681.     LIST
  682.     (
  683.         'lbil'          // List of instruments
  684.         <lbin-list>     // Each instrument is encapsulated in a list
  685.     )
  686.  
  687.         // <lbin-list>
  688.         LIST
  689.         (
  690.             'lbin'
  691.             <bins-ck>
  692.             [<DMRF-list>]       // Optional reference to DLS Collection file.
  693.         )
  694.  
  695.             // <bins-ck>            // Instrument chunk
  696.             (
  697.                 'bins'
  698.                 <DMUS_IO_INSTRUMENT>    // Instrument header
  699.             )
  700. */      
  701.  
  702. /*  File io for DirectMusic Segment object */
  703.  
  704. /* RIFF ids: */
  705.  
  706. #define DMUS_FOURCC_SEGMENT_FORM    mmioFOURCC('D','M','S','G')
  707. #define DMUS_FOURCC_SEGMENT_CHUNK   mmioFOURCC('s','e','g','h')
  708. #define DMUS_FOURCC_TRACK_LIST      mmioFOURCC('t','r','k','l')
  709. #define DMUS_FOURCC_TRACK_FORM      mmioFOURCC('D','M','T','K')
  710. #define DMUS_FOURCC_TRACK_CHUNK     mmioFOURCC('t','r','k','h')
  711.  
  712. /*  io structures:*/
  713.  
  714. typedef struct _DMUS_IO_SEGMENT_HEADER
  715. {
  716.     DWORD       dwRepeats;      /* Number of repeats. By default, 0. */
  717.     MUSIC_TIME  mtLength;       /* Length, in music time. */
  718.     MUSIC_TIME  mtPlayStart;    /* Start of playback. By default, 0. */
  719.     MUSIC_TIME  mtLoopStart;    /* Start of looping portion. By default, 0. */
  720.     MUSIC_TIME  mtLoopEnd;      /* End of loop. Must be greater than dwPlayStart. By default equal to length. */
  721.     DWORD       dwResolution;   /* Default resolution. */
  722. } DMUS_IO_SEGMENT_HEADER;
  723.  
  724. typedef struct _DMUS_IO_TRACK_HEADER
  725. {
  726.     GUID        guidClassID;    /* Class id of track. */
  727.     DWORD       dwPosition;     /* Position in track list. */
  728.     DWORD       dwGroup;        /* Group bits for track. */
  729.     FOURCC      ckid;           /* chunk ID of track's data chunk if 0 fccType valid. */
  730.     FOURCC      fccType;        /* list type if NULL ckid valid */
  731. } DMUS_IO_TRACK_HEADER;
  732.  
  733. /*
  734. RIFF
  735. (
  736.     'DMSG'          // DirectMusic Segment chunk
  737.     <segh-ck>       // Segment header chunk
  738.     [<guid-ck>]     // GUID for segment
  739.     [<vers-ck>]     // Optional version info
  740.     [<UNFO-list>]   // Name, author, copyright info., comments
  741.     <trkl-list>     // List of Tracks
  742.     [<DMTG-form>]   // Optional ToolGraph
  743. )
  744.  
  745.     // <segh-ck>        
  746.     'segh'
  747.     (
  748.         <DMUS_IO_SEGMENT_HEADER>
  749.     )
  750.     
  751.     // <guid-ck>
  752.     'guid'
  753.     (
  754.         <GUID>
  755.     )
  756.  
  757.     // <vers-ck>
  758.     vers
  759.     (
  760.         <DMUS_IO_VERSION>
  761.     )
  762.  
  763.     // <trkl-list>
  764.     LIST
  765.     (
  766.         'trkl'          // List of tracks
  767.         <DMTK-form>...  // Each track is encapsulated in a RIFF chunk
  768.     )
  769.  
  770. // <DMTK-form>      // Tracks can be embedded in a segment or stored as separate files.
  771. RIFF
  772. (
  773.     'DMTK'
  774.     <trkh-ck>
  775.     [<guid-ck>]     // Optional GUID for track object instance (not to be confused with Class id in track header)
  776.     [<vers-ck>]     // Optional version info
  777.     [<UNFO-list>]   // Optional name, author, copyright info., comments
  778.     [<data>]        // Track data. Must be a RIFF readable chunk.
  779. )
  780.  
  781.     // <trkh-ck>            // Track header chunk
  782.     (
  783.         'trkh'
  784.         <DMUS_IO_TRACK_HEADER>  // Track header
  785.     )
  786. */
  787.  
  788. /*  File io for DirectMusic reference chunk. 
  789.     This is used to embed a reference to an object.
  790. */
  791.  
  792. /*  RIFF ids: */
  793.  
  794. #define DMUS_FOURCC_REF_LIST        mmioFOURCC('D','M','R','F')
  795. #define DMUS_FOURCC_REF_CHUNK       mmioFOURCC('r','e','f','h')
  796. #define DMUS_FOURCC_DATE_CHUNK      mmioFOURCC('d','a','t','e')
  797. #define DMUS_FOURCC_NAME_CHUNK      mmioFOURCC('n','a','m','e')
  798. #define DMUS_FOURCC_FILE_CHUNK      mmioFOURCC('f','i','l','e')
  799.  
  800. typedef struct _DMUS_IO_REFERENCE
  801. {
  802.     GUID    guidClassID;    /* Class id is always required. */
  803.     DWORD   dwValidData;    /* Flags. */
  804. } DMUS_IO_REFERENCE;
  805.  
  806. /*
  807. LIST
  808. (
  809.     'DMRF'          // DirectMusic Reference chunk
  810.     <refh-ck>       // Reference header chunk
  811.     [<guid-ck>]     // Optional object GUID.
  812.     [<date-ck>]     // Optional file date.
  813.     [<name-ck>]     // Optional name.
  814.     [<file-ck>]     // Optional file name.
  815.     [<catg-ck>]     // Optional category name.
  816.     [<vers-ck>]     // Optional version info.
  817. )
  818.  
  819.     // <refh-ck>
  820.     'refh'
  821.     (
  822.         <DMUS_IO_REFERENCE>
  823.     )
  824.  
  825.     // <guid-ck>
  826.     'guid'
  827.     (
  828.         <GUID>
  829.     )
  830.  
  831.     // <date-ck>
  832.     date
  833.     (
  834.         <FILETIME>
  835.     )
  836.  
  837.     // <name-ck>
  838.     name
  839.     (
  840.         // Name, stored as NULL terminated string of WCHARs
  841.     )
  842.  
  843.     // <file-ck>
  844.     file
  845.     (
  846.         // File name, stored as NULL terminated string of WCHARs
  847.     )
  848.  
  849.     // <catg-ck>
  850.     catg
  851.     (
  852.         // Category name, stored as NULL terminated string of WCHARs
  853.     )
  854.  
  855.     // <vers-ck>
  856.     vers
  857.     (
  858.         <DMUS_IO_VERSION>
  859.     )
  860. */
  861.  
  862. /* Chord Maps */
  863.  
  864. /* runtime chunks */
  865. #define DMUS_FOURCC_CHORDMAP_FORM       mmioFOURCC('D','M','P','R')
  866. #define DMUS_FOURCC_IOCHORDMAP_CHUNK    mmioFOURCC('p','e','r','h')
  867. #define DMUS_FOURCC_SUBCHORD_CHUNK      mmioFOURCC('c','h','d','t')
  868. #define DMUS_FOURCC_CHORDENTRY_CHUNK    mmioFOURCC('c','h','e','h')
  869. #define DMUS_FOURCC_SUBCHORDID_CHUNK    mmioFOURCC('s','b','c','n')
  870. #define DMUS_FOURCC_IONEXTCHORD_CHUNK   mmioFOURCC('n','c','r','d')
  871. #define DMUS_FOURCC_NEXTCHORDSEQ_CHUNK  mmioFOURCC('n','c','s','q')
  872. #define DMUS_FOURCC_IOSIGNPOST_CHUNK    mmioFOURCC('s','p','s','h')
  873. #define DMUS_FOURCC_CHORDNAME_CHUNK     mmioFOURCC('I','N','A','M')
  874.  
  875. /* runtime list chunks */
  876. #define DMUS_FOURCC_CHORDENTRY_LIST     mmioFOURCC('c','h','o','e')
  877. #define DMUS_FOURCC_CHORDMAP_LIST       mmioFOURCC('c','m','a','p')
  878. #define DMUS_FOURCC_CHORD_LIST          mmioFOURCC('c','h','r','d')
  879. #define DMUS_FOURCC_CHORDPALETTE_LIST   mmioFOURCC('c','h','p','l')
  880. #define DMUS_FOURCC_CADENCE_LIST        mmioFOURCC('c','a','d','e')
  881. #define DMUS_FOURCC_SIGNPOSTITEM_LIST   mmioFOURCC('s','p','s','t')
  882.  
  883. #define DMUS_FOURCC_SIGNPOST_LIST       mmioFOURCC('s','p','s','q')
  884.  
  885. /* values for dwChord field of DMUS_IO_PERS_SIGNPOST */
  886. /* DMUS_SIGNPOSTF_ flags are also used in templates (DMUS_IO_SIGNPOST) */
  887. #define DMUS_SIGNPOSTF_A        1      
  888. #define DMUS_SIGNPOSTF_B        2
  889. #define DMUS_SIGNPOSTF_C        4
  890. #define DMUS_SIGNPOSTF_D        8
  891. #define DMUS_SIGNPOSTF_E        0x10
  892. #define DMUS_SIGNPOSTF_F        0x20
  893. #define DMUS_SIGNPOSTF_LETTER   (DMUS_SIGNPOSTF_A | DMUS_SIGNPOSTF_B | DMUS_SIGNPOSTF_C | DMUS_SIGNPOSTF_D | DMUS_SIGNPOSTF_E | DMUS_SIGNPOSTF_F)
  894. #define DMUS_SIGNPOSTF_1        0x100
  895. #define DMUS_SIGNPOSTF_2        0x200
  896. #define DMUS_SIGNPOSTF_3        0x400
  897. #define DMUS_SIGNPOSTF_4        0x800
  898. #define DMUS_SIGNPOSTF_5        0x1000
  899. #define DMUS_SIGNPOSTF_6        0x2000
  900. #define DMUS_SIGNPOSTF_7        0x4000
  901. #define DMUS_SIGNPOSTF_ROOT     (DMUS_SIGNPOSTF_1 | DMUS_SIGNPOSTF_2 | DMUS_SIGNPOSTF_3 | DMUS_SIGNPOSTF_4 | DMUS_SIGNPOSTF_5 | DMUS_SIGNPOSTF_6 | DMUS_SIGNPOSTF_7)
  902. #define DMUS_SIGNPOSTF_CADENCE  0x8000
  903.  
  904. /* values for dwChord field of DMUS_IO_PERS_SIGNPOST */
  905. #define DMUS_SPOSTCADENCEF_1  2   /* Use the first cadence chord. */
  906. #define DMUS_SPOSTCADENCEF_2  4   /* Use the second cadence chord. */
  907.  
  908. /* run time data structs */
  909. typedef struct _DMUS_IO_CHORDMAP
  910. {
  911.     WCHAR   wszLoadName[20];
  912.     DWORD   dwScalePattern;
  913.     DWORD   dwFlags;
  914. } DMUS_IO_CHORDMAP;
  915.  
  916. typedef struct _DMUS_IO_CHORDMAP_SUBCHORD
  917. {
  918.     DWORD   dwChordPattern;
  919.     DWORD   dwScalePattern;
  920.     DWORD   dwInvertPattern;
  921.     BYTE    bChordRoot;
  922.     BYTE    bScaleRoot;
  923.     WORD    wCFlags;
  924.     DWORD   dwLevels;   /* parts or which subchord levels this chord supports */
  925. } DMUS_IO_CHORDMAP_SUBCHORD;
  926.  
  927. /* Legacy name... */
  928. typedef DMUS_IO_CHORDMAP_SUBCHORD DMUS_IO_PERS_SUBCHORD;
  929.  
  930. typedef struct _DMUS_IO_CHORDENTRY
  931. {
  932.     DWORD   dwFlags;
  933.     WORD    wConnectionID;  /* replaces runtime "pointer to this" */
  934. } DMUS_IO_CHORDENTRY;
  935.  
  936. typedef struct _DMUS_IO_NEXTCHORD
  937. {
  938.     DWORD   dwFlags;
  939.     WORD    nWeight;
  940.     WORD    wMinBeats;
  941.     WORD    wMaxBeats;
  942.     WORD    wConnectionID;  /* points to an ioChordEntry */
  943. } DMUS_IO_NEXTCHORD;
  944.  
  945. typedef struct _DMUS_IO_CHORDMAP_SIGNPOST
  946. {
  947.     DWORD   dwChords;   /* 1bit per group */
  948.     DWORD   dwFlags;
  949. } DMUS_IO_CHORDMAP_SIGNPOST;
  950.  
  951. /* Legacy name... */
  952. typedef DMUS_IO_CHORDMAP_SIGNPOST DMUS_IO_PERS_SIGNPOST;
  953.  
  954. /*
  955. RIFF
  956. (
  957.     'DMPR'
  958.     <perh-ck>           // Chord map header chunk
  959.     [<guid-ck>]         // guid chunk
  960.     [<vers-ck>]         // version chunk (two DWORDS)
  961.     [<UNFO-list>]       // Unfo chunk
  962.     <chdt-ck>           // subchord database
  963.     <chpl-list>         // chord palette
  964.     <cmap-list>         // chord map
  965.     <spsq-list>         // signpost list
  966.  )
  967.  
  968. <cmap-list> ::= LIST('cmap' <choe-list> )
  969.  
  970. <choe-list> ::= LIST('choe'
  971.                                 <cheh-ck>   // chord entry data
  972.                                 <chrd-list> // chord definition
  973.                                 <ncsq-ck>   // connecting(next) chords
  974.                      )
  975.  
  976. <chrd-list> ::= LIST('chrd' 
  977.                                 <INAM-ck>   // name of chord in wide char format
  978.                                 <sbcn-ck>   // list of subchords composing chord
  979.                     )
  980.  
  981. <chpl-list> ::= LIST('chpl' 
  982.                                 <chrd-list> ... // chord definition
  983.                     )
  984.  
  985. <spsq-list> ::== LIST('spsq' <spst-list> ... )
  986.  
  987. <spst-list> ::= LIST('spst'
  988.                              <spsh-ck>
  989.                              <chrd-list>
  990.                              [<cade-list>]
  991.                     )
  992.  
  993. <cade-list> ::= LIST('cade' <chrd-list> ...)
  994.  
  995. <perh-ck> ::= perh(<DMUS_IO_CHORDMAP>)
  996.  
  997. <chdt-ck> ::= chdt(<cbChordSize::WORD>
  998.                    <DMUS_IO_PERS_SUBCHORD> ... )
  999.  
  1000. <cheh-ck> ::= cheh(<DMUS_IO_CHORDENTRY>)
  1001.  
  1002. <sbcn-ck> ::= sbcn(<cSubChordID:WORD> ...)
  1003.  
  1004. <ncsq-ck> ::= ncsq(<wNextChordSize:WORD> 
  1005.                    <DMUS_IO_NEXTCHORD>...)
  1006.  
  1007. <spsh-ck> ::= spsh(<DMUS_IO_PERS_SIGNPOST>)
  1008.  
  1009. */
  1010.  
  1011. /* Signpost tracks */
  1012.  
  1013. #define DMUS_FOURCC_SIGNPOST_TRACK_CHUNK     mmioFOURCC( 's', 'g', 'n', 'p' )
  1014.  
  1015.  
  1016. typedef struct _DMUS_IO_SIGNPOST
  1017. {
  1018.     MUSIC_TIME  mtTime;
  1019.     DWORD       dwChords;
  1020.     WORD        wMeasure;
  1021. } DMUS_IO_SIGNPOST;
  1022.  
  1023. /*
  1024.  
  1025.     // <sgnp-list>
  1026.     'sgnp'
  1027.     (
  1028.         //sizeof DMUS_IO_SIGNPOST: DWORD
  1029.         <DMUS_IO_SIGNPOST>...
  1030.     )
  1031.  
  1032. */
  1033.  
  1034. #define DMUS_FOURCC_MUTE_CHUNK  mmioFOURCC('m','u','t','e')
  1035.  
  1036. typedef struct _DMUS_IO_MUTE
  1037. {
  1038.     MUSIC_TIME  mtTime;
  1039.     DWORD       dwPChannel;
  1040.     DWORD       dwPChannelMap;
  1041. } DMUS_IO_MUTE;
  1042.  
  1043. /*
  1044.  
  1045.     // <mute-list>
  1046.     'mute'
  1047.     (
  1048.         //sizeof DMUS_IO_MUTE:DWORD
  1049.         <DMUS_IO_MUTE>...
  1050.     )
  1051.  
  1052.  
  1053. */
  1054.  
  1055. /* Used for both style and chord map tracks */
  1056.  
  1057. #define DMUS_FOURCC_TIME_STAMP_CHUNK    mmioFOURCC('s', 't', 'm', 'p')
  1058.  
  1059. /* Style tracks */
  1060.  
  1061. #define DMUS_FOURCC_STYLE_TRACK_LIST    mmioFOURCC('s', 't', 't', 'r')
  1062. #define DMUS_FOURCC_STYLE_REF_LIST      mmioFOURCC('s', 't', 'r', 'f')
  1063.  
  1064. /*
  1065.  
  1066.     // <sttr-list>
  1067.     LIST('sttr'
  1068.     (
  1069.         // some number of <strf-list>
  1070.     )
  1071.  
  1072.     // <strf-list>
  1073.     LIST('strf'
  1074.     (
  1075.         <stmp-ck>
  1076.         <DMRF>
  1077.     )
  1078.  
  1079.     // <stmp-ck> defined in ..\dmcompos\dmcompp.h
  1080.  
  1081. */
  1082.  
  1083. /* Chord map tracks */
  1084.  
  1085. #define DMUS_FOURCC_PERS_TRACK_LIST mmioFOURCC('p', 'f', 't', 'r')
  1086. #define DMUS_FOURCC_PERS_REF_LIST   mmioFOURCC('p', 'f', 'r', 'f')
  1087.  
  1088. /*
  1089.  
  1090.     // <pftr-list>
  1091.     LIST('pftr'
  1092.     (
  1093.         // some number of <pfrf-list>
  1094.     )
  1095.  
  1096.     // <pfrf-list>
  1097.     LIST('pfrf'
  1098.     (
  1099.         <stmp-ck>
  1100.         <DMRF>
  1101.     )
  1102.  
  1103.   // <stmp-ck>
  1104.   'stmp'
  1105.   (
  1106.     // time:DWORD
  1107.   )
  1108.  
  1109.  
  1110.  
  1111. */
  1112.  
  1113. #define DMUS_FOURCC_TEMPO_TRACK     mmioFOURCC('t','e','t','r')
  1114.  
  1115. /*
  1116.     // tempo list
  1117.     'tetr'
  1118.     (
  1119.         // sizeof DMUS_IO_TEMPO_ITEM: DWORD
  1120.         <DMUS_IO_TEMPO_ITEM>...
  1121.     )
  1122.   */
  1123.  
  1124. #define DMUS_FOURCC_SEQ_TRACK       mmioFOURCC('s','e','q','t')
  1125. #define DMUS_FOURCC_SEQ_LIST        mmioFOURCC('e','v','t','l')
  1126. #define DMUS_FOURCC_CURVE_LIST      mmioFOURCC('c','u','r','l')
  1127.  
  1128. /*
  1129.     // sequence track
  1130.     'seqt'
  1131.     (
  1132.         // sequence list
  1133.         'evtl'
  1134.         (
  1135.             // sizeof DMUS_IO_SEQ_ITEM: DWORD
  1136.             <DMUS_IO_SEQ_ITEM>...
  1137.         )
  1138.         // curve list
  1139.         'curl'
  1140.         (
  1141.             // sizeof DMUS_IO_CURVE_ITEM: DWORD
  1142.             <DMUS_IO_CURVE_ITEM>...
  1143.         )
  1144.     )
  1145. */
  1146.  
  1147. #define DMUS_FOURCC_SYSEX_TRACK     mmioFOURCC('s','y','e','x')
  1148.  
  1149. /*
  1150.     // sysex track
  1151.     'syex'
  1152.     (
  1153.         // list of:
  1154.         // {
  1155.         //      <DMUS_IO_SYSEX_ITEM>
  1156.         //      sys-ex: data
  1157.         // }...
  1158.     )
  1159. */
  1160.  
  1161. #define DMUS_FOURCC_TIMESIGNATURE_TRACK mmioFOURCC('t','i','m','s')
  1162.  
  1163. /*
  1164.     // time signature track
  1165.     'tims'
  1166.     (
  1167.         // size of DMUS_IO_TIMESIGNATURE_ITEM : DWORD
  1168.         <DMUS_IO_TIMESIGNATURE_ITEM>...
  1169.     )
  1170. */
  1171.  
  1172. #ifdef __cplusplus
  1173. }; /* extern "C" */
  1174. #endif
  1175.  
  1176. #include <poppack.h>
  1177.  
  1178. #endif /* #ifndef _DMUSICF_ */
  1179.